<template>
	<view>
		<u-sticky>
			<u-tabs class="tabs" :list="tabsList" @click="onTabClick" :scrollable="false"
				style="padding: 0 24rpx; background: #fff; z-index: 22; position: sticky; top: 0px"
				:activeStyle="{ color: '#171717', fontSize: '14px' }"
				:inactiveStyle="{ color: '#C6C6C6', fontSize: '14px' }" lineColor="#1E6FFF"></u-tabs>
		</u-sticky>
		<view class="task_lists" :style="{ paddingBottom: tabvalue == '待办' ? '130rpx' : '0' }">
			<collapse name="基本信息" id="outside1" :maxHeight="maxHeight">
				<view class="listdefault" :id="uId">
					<view class="action" v-for="(item, key) in basicInfo" :key="key">
						<template>
							<view class="list1">{{ key }}</view>
							<view class="list2">{{ detailData[item] }}</view>
						</template>
					</view>
				</view>
			</collapse>
			<collapse name="项目信息" id="outside2" :maxHeight="maxHeight1">
				<view class="listdefault" :id="uId1">
					<view class="action" v-for="(item, key) in ProjectInfo" :key="key">
						<template>
							<view class="list1">{{ key }}</view>
							<view class="list2">{{ detailData[item] }}</view>
						</template>
					</view>
				</view>
			</collapse>
			<action-collapse name="存档信息" :childFields="childFields" :dataSource="childSource"></action-collapse>
			<!-- <u-collapse :value="['file']" ref="fileCollapse">
				<u-collapse-item title="存档信息" name="file">
					<view class="listdefault" v-for="(entity, index) in childSource" :key="index">
						<view class="action" v-for="(item, key) in childFields" :key="key">
							<template v-if="['档案名称', '纸质版数量', '是否有电子版', '备注'].includes(key)">
								<template v-if="key === '是否有电子版'">
									<view class="list1">{{ key }}</view>
									<view class="list2">
										{{ filterMultiDictText(dictOptions['yesOrNo'], entity.isElectronicVersion + '') }}
									</view>
								</template>
								<template v-else>
									<view class="list1">{{ key }}</view>
									<view class="list2">{{ entity[item] }}</view>
								</template>
							</template>
						</view>
					</view>
				</u-collapse-item>
			</u-collapse> -->
			<default-list name="附件">
				<file-list :fileList="detailData.attachments"></file-list>
			</default-list>
			<default-list name="流程图" id="outside3">
				<template slot="right">
					<view class="flow_right" @click="flowView">
						<image src="../../static/synergy/viewflow.png" mode="aspectFill"></image>
						<text>流程图</text>
					</view>
				</template>
				<flow-list :dataSource="resultList"></flow-list>
			</default-list>
		</view>
		<view class="task_bottom" v-if="tabvalue == '待办'">
			<view class="task_bottom_write" @click="approval">
				<image src="../../static/synergy/write_commont.png" mode="aspectFill"></image>
				<text>审批</text>
			</view>
			<view class="refuse" @click="refuseProcess" v-if="nodeObj.isSubmit !== '1'">退回</view>
			<view class="agree" @click="agreeProcess"
				:style="{ flex: nodeObj.isSubmit == '1' ? 1 : 'initial', margin: nodeObj.isSubmit == '1' ? '0 20rpx' : '' }">
				同意
			</view>
		</view>
		<u-toast ref="uToast"></u-toast>
	</view>
</template>
<script>
	import fileList from './components/fileList.vue'
	import collapse from './components/collapse.vue'
	import defaultList from './components/defaultList.vue'
	import flowList from './components/flowList.vue'
	import actionCollapse from './components/actionCollapse.vue'
	import address from '@/utils/address.js'
	import {
		erpProjectArchiveQueryById,
		erpProjectArchiveInfoList,
		getProcessTaskTransInfo, // 查询流程流转信息
		getProcessHistoryList, // 查询流程图信息
		getNodePositionInfo, // 查询坐标信息数据
		rejectProcess, // 退回
		processComplete, // 提交完成
	} from '@/api/index.js'
	import {
		BASE_URL
	} from '@/utils/baseUrl.js'
	import {
		filterMultiDictText,
		initDictOptions
	} from '@/utils/JDictSelectUtil.js'

	export default {
		data() {
			return {
				address,
				filterMultiDictText,
				tabsList: [{
						name: '基本信息',
						id: 'outside1'
					},
					{
						name: '流程',
						id: 'outside3'
					},
				],
				// childTable: [],
				detailData: {}, // 详情数据
				basicInfo: {
					// 主表信息字段
					单据编号: 'billNo',
					申请时间: 'createTime',
					申请人: 'proposer_dictText',
					申请人部门: 'proposerDeptId_dictText'
				},
				ProjectInfo: {
					项目名称: 'projectName',
					项目编号: 'projectNo',
					签订单位: 'signUnit_dictText',
					经营团队: 'managementTeam_dictText',
					项目承接人: 'undertaker_dictText',
					项目地址: 'addressDetail',
					业务名称: 'businessName_dictText',
					任务编号: 'taskNo',
					实施部门: 'implementationDepartment_dictText',
					生产团队: 'productionTeam_dictText',
					项目负责人: 'projectLeader_dictText',
					行业类别: 'industryCategory_dictText',
					审批级别: 'approvalLevel',
					审批机构: 'approvalAuthority',
					'投资额(元)': 'investmentAmount',
					规模: 'scale',
					批复文号: 'approvalDocumentNo',
					批复日期: 'approvalDate',
					档案大类: 'archiveMajorCategory_dictText',
					档案小类: 'archiveMinorCategory_dictText',
					档案所属团队: 'archiveBelongingTeam_dictText',
					密级: 'secrecyLevel_dictText'
				},
				childFields: { // 子表字段
					'档案名称': 'archiveName',
					'纸质版数量': 'paperVersionQuantity',
					'是否有电子版': 'isElectronicVersion_dictText',
					'备注': 'remark'
				},
				resultList: [], // 流程图数据
				nodePositionInfo: {}, // 坐标信息
				processInstanceId: '',
				scrollTop: 0, // 滚动顶部距离
				model: {}, // 处理单据表信息
				resultObj: {}, // 流程图流转信息
				nodeObj: {}, // 流程节点信息
				tabvalue: '', // 协同首页tabs name
				childSource: [], // 字表数据
				dictOptions: {}, // 字典数据
				isClick: false,
				maxHeight: 0,
				maxHeight1: 0,
				uId: uni.$u.guid(),
				uId1: uni.$u.guid(),
      			timer: null,
			}
		},
		components: {
			fileList,
			collapse,
			defaultList,
			flowList,
			actionCollapse
		},
		onPageScroll(e) {
			this.scrollTop = e.scrollTop
		},
		onReady() {
			uni.setNavigationBarTitle({
				title: this.model.bpmBizTitle.replace(/(【|】)/g, ''),
			})
		},
		onLoad(options) {
			this.model = JSON.parse(decodeURIComponent(options.item))

			var that = this
			// #ifdef APP-NVUE
			var eventChannel = this.$scope.eventChannel // 兼容APP-NVUE
			// #endif
			// #ifndef APP-NVUE
			var eventChannel = this.getOpenerEventChannel()
			// #endif
			// 监听sendMessage事件，获取上一页面通过eventChannel传送到当前页面的数据
			eventChannel.on('sendMessage', function(data) {
				that.tabvalue = data.tabvalue
				that.nodeObj = JSON.parse(decodeURIComponent(data.nodeObj))
				that.loadData(that.nodeObj.dataId)
				that.getNodePositionInfoData(that.model.processInstanceId)
				if (that.tabvalue == '待办') {
					that.getProcessTaskTrans(that.model.id)
				}
				that.initDictConfig()
				// that.getChildTable()
			})
		},
		methods: {
			initDictConfig() {
				initDictOptions('yes_no').then((res) => {
					if (res.success) {
						this.$set(this.dictOptions, 'yesOrNo', res.result)
					}
				})
			},
			// 获取子表数据
			getChildren(id) {
				var params = {
					mainId: id,
					pageSize: 100
				}
				erpProjectArchiveInfoList(params).then(res => {
					if (res.success) {
						res.result.records.map(value => {
							if (value.isElectronicVersion === null || value.isElectronicVersion === undefined || value.isElectronicVersion === '') {
								value.isElectronicVersion_dictText = ''
							} else {
								if (value.isElectronicVersion == '1') {
									value.isElectronicVersion_dictText = '是'
								} else {
									value.isElectronicVersion_dictText = '否'
								}
							}
						})
						this.childSource = res.result.records || []
					} else {
						this.$refs.uToast.show({
							message: res.message,
							type: 'error'
						})
					}
				})
			},
			// 点击进入审批页面
			approval() {
				if (this.isClick) {
					return
				}
				var that = this
				var nextnode = ''
				if (this.resultObj.transitionList) {
					this.resultObj.transitionList.forEach((item) => {
						nextnode += ',' + item.nextnode
					})
				}
				uni.navigateTo({
					url: '/pages/synergy/approval',
					success: function(res) {
						// 通过eventChannel向被打开页面传送数据
						res.eventChannel.emit('acceptDataFromOpenerPage', {
							nodeObj: encodeURIComponent(JSON.stringify(that.nodeObj).replace(/%/g,
								'%25')),
							model: encodeURIComponent(JSON.stringify(that.model).replace(/%/g, '%25')),
							nextnode: nextnode,
						})
					},
				})
			},
			// 查询流程流转信息 -- 获取下一节点信息
			getProcessTaskTrans(taskId) {
				getProcessTaskTransInfo({
						taskId
					})
					.then((res) => {
						if (res.success) {
							this.resultObj = res.result
						} else {
							this.$refs.uToast.show({
								message: res.message,
								type: 'error',
							})
						}
					})
					.catch((err) => {
						console.log(err)
					})
			},
			// 查询详情
			async loadData(id) {
				erpProjectArchiveQueryById({
					id
				}).then(async (res) => {
					if (res.success) {
						this.detailData = await res.result
						var arr = await res.result.area.split(',')
						var addressDetail = await ''
						this.address.map((value) => {
						  if (arr[0] && value.code == arr[0]) {
						    addressDetail = value.name
						    value.children.map((val) => {
						      if (arr[1] && val.code == arr[1]) {
						        addressDetail = addressDetail + val.name
						        val.children.map((item) => {
						          if (arr[2] && item.code == arr[2]) {
						            addressDetail = addressDetail + item.name
						          }
						        })
						      }
						    })
						  }
						})
						this.detailData.addressDetail = addressDetail + res.result.projectAddress
						this.timer = setTimeout(() => {
							this.$nextTick(function() {
								uni
									.createSelectorQuery()
									.select('#' + this.uId)
									.boundingClientRect((data) => {
										this.maxHeight = data.height
									})
									.exec()
							})
							this.$nextTick(function() {
								uni
									.createSelectorQuery()
									.select('#' + this.uId1)
									.boundingClientRect((data) => {
										this.maxHeight1 = data.height
									})
									.exec()
							})
							clearTimeout(this.timer)
							this.timer = null
						}, 300)
						this.getChildren(this.detailData.id)
					} else {
						this.$refs.uToast.show({
							message: res.message,
							type: 'error',
						})
					}
				})
			},
			// 查询流程节点信息 -- 流程图数据
			getProcessHistoryListS(processInstanceId) {
				var url = ''
				var params = ''
				url = getProcessHistoryList
				params = {
					processInstanceId: processInstanceId,
				}

				url(params).then((res) => {
					if (res.success) {
						this.resultList = res.result.records
					} else {
						this.$refs.uToast.show({
							message: res.message,
							type: 'error',
						})
					}
				})
			},
			// 查询坐标信息数据 -- 流程图备注
			getNodePositionInfoData(processInstanceId) {
				getNodePositionInfo({
						processInstanceId
					})
					.then((res) => {
						if (res.success) {
							this.nodePositionInfo = res.result
							this.getProcessHistoryListS(processInstanceId)
						} else {
							this.$refs.uToast.show({
								message: res.message,
								type: 'error',
							})
						}
					})
					.catch((e) => {
						console.error(e)
					})
			},
			// 流程图预览
			flowView() {
				var params = `_t=${Date.parse(new Date()) / 1000}&processInstanceId=${this.model.processInstanceId}`
				var url = `${BASE_URL}/api/erpmng/act/task/traceImage?${params}`
				this.viewImage(url)
			},
			// 预览图片
			viewImage(url) {
				uni.previewImage({
					urls: [url],
					longPressActions: {
						itemList: ['保存图片'],
						success: function(data) {
							uni.downloadFile({
								url: url,
								success: (result) => {
									if (result.statusCode === 200) {
										//文件保存到本地
										uni.saveFile({
											tempFilePath: result.tempFilePath, //临时路径
											success: function(ress) {
												uni.showToast({
													icon: 'none',
													mask: true,
													title: '文件已保存：' + ress
														.savedFilePath, //保存路径
													duration: 3000,
												})
											},
										})
									}
								},
								fail: (err) => {
									uni.showToast({
										icon: 'none',
										mask: true,
										title: '失败请重新下载',
									})
								},
							})
						},
						fail: function(err) {
							console.log(err.errMsg)
						},
					},
				})
			},
			// 点击tabs
			onTabClick(item) {
				uni
					.createSelectorQuery()
					.in(this)
					.select(`#${item.id}`)
					.boundingClientRect((data) => {
						uni.pageScrollTo({
							scrollTop: data.top + this.scrollTop - 54,
							duration: 150,
						})
					})
					.exec()
			},
			// 拒绝流程
			refuseProcess() {
				var that = this
				var nextnode = ''
				if(this.resultObj.transitionList){
					this.resultObj.transitionList.forEach(item => {
						nextnode += ',' + item.nextnode
					})
				}
				uni.navigateTo({
					url:'/pages/synergy/approval',
					success: function(res) {
						// 通过eventChannel向被打开页面传送数据
						res.eventChannel.emit('acceptDataFromOpenerPage', {
							nodeObj: encodeURIComponent(JSON.stringify(that.nodeObj).replace(/%/g, '%25')),
							model: encodeURIComponent(JSON.stringify(that.model).replace(/%/g, '%25')),
							resultObj: encodeURIComponent(JSON.stringify(that.resultObj).replace(/%/g, '%25')),
							nextnode: nextnode,
							noAgree: '1'
							
						})
					}
				})
			},
			// 同意流程
			agreeProcess() {
				if (this.isClick) {
					this.$refs.uToast.show({
						message: '请勿重复点击！',
						type: 'default',
					})
					return
				}
				var nextnode = ''
				if (this.resultObj.transitionList) {
					this.resultObj.transitionList.forEach((item) => {
						nextnode += ',' + item.nextnode
					})
				}
				this.isClick = true

				var _this = this
				uni.showModal({
					content: '该任务将同意审批，是否继续？',
					cancelText: '否',
					confirmText: '是',
					confirmColor: '#576B95',
					cancelColor: '#000000',
					success: function(res) {
						if (res.confirm) {
							var params = {
								bizTaskList: '[]',
								ccUserIds: '',
								ccUserRealNames: '',
								fileList: '[]',
								isSubmit: _this.nodeObj.isSubmit,
								method: 'post',
								nextCodeCount: '',
								nextUserId: '',
								nextUserName: '',
								nextnode: nextnode ? nextnode.substring(1) : '',
								procInsId: _this.model.processInstanceId,
								processModel: 1,
								reason: '同意',
								rejectModelNode: '',
								taskId: _this.model.id,
							}
							processComplete(params)
								.then((res) => {
									_this.$refs.uToast.show({
										message: res.message,
										type: res.success ? 'success' : 'error',
										duration: 1000,
										complete() {
											if (res.success) uni.navigateBack()
											_this.isClick = false
										},
									})
								})
								.catch((err) => {
									_this.isClick = false
								})
						} else if (res.cancel) {
							_this.show = false
							_this.isClick = false
						}
					},
				})
			},
		},
	}
</script>
<style lang="scss" scoped>
	@import './common/action.scss';

	.task_lists {
		padding: 20rpx 20rpx 0;
	}

	.image_lists {
		padding: 0 0 12rpx 12rpx;
		display: flex;
		flex-wrap: wrap;

		.image_list {
			margin-bottom: 20rpx;
			width: 144rpx;
			margin-right: 14rpx;

			.image_img {
				width: 116rpx;
				height: 116rpx;
				padding: 12rpx;
				background: rgba(0, 0, 0, 0.02);
				border-radius: 1px;
				border: 1px solid rgba(0, 0, 0, 0.08);
				position: relative;

				.image_action {
					position: absolute;
					top: 50%;
					left: 50%;
					transform: translateX(-50%) translateY(-50%);
					width: 36rpx;
					height: 36rpx;
				}

				.image_source {
					width: 100%;
					height: 100%;
				}
			}

			.image_name {
				font-size: 20rpx;
				font-family: PingFangSC-Regular, PingFang SC;
				font-weight: 400;
				color: #b2b2b2;
				line-height: 28rpx;
				margin-top: 8rpx;
				text-align: left;
				overflow: hidden;
				white-space: nowrap;
				text-overflow: ellipsis;
				width: 152rpx;
			}
		}
	}

	.flow_right {
		display: flex;
		align-items: center;

		image {
			width: 40rpx;
			height: 40rpx;
		}

		text {
			font-size: 14px;
			font-family: PingFangSC-Regular, PingFang SC;
			font-weight: 400;
			color: #1e6fff;
			line-height: 40rpx;
			margin-left: 4rpx;
		}
	}

	.task_bottom {
		display: flex;
		align-items: center;
		padding: 20rpx 0 20rpx 52rpx;
		background-color: #ffffff;
		position: fixed;
		bottom: 0;
		left: 0;
		right: 0;
		z-index: 10000;

		.task_bottom_write {
			display: flex;
			align-items: center;

			image {
				width: 48rpx;
				height: 48rpx;
				margin-right: 8rpx;
			}

			text {
				font-size: 28rpx;
				font-family: PingFangSC-Regular, PingFang SC;
				font-weight: 400;
				color: #7f7f7f;
				line-height: 40rpx;
			}
		}

		.refuse {
			width: 168rpx;
			height: 90rpx;
			line-height: 90rpx;
			background: rgba(0, 0, 0, 0.05);
			border-radius: 10rpx;
			margin: 0 16rpx 0 52rpx;
			font-size: 34rpx;
			font-family: PingFangSC-Regular, PingFang SC;
			font-weight: 400;
			color: rgba(0, 0, 0, 0.5);
			text-align: center;
		}

		.agree {
			width: 318rpx;
			height: 90rpx;
			line-height: 90rpx;
			background: #1e6fff;
			border-radius: 10rpx;
			font-size: 34rpx;
			font-family: PingFangSC-Regular, PingFang SC;
			font-weight: 400;
			color: #ffffff;
			text-align: center;
		}
	}
</style>